import tkinter as tk
from tkinter import ttk, messagebox
import os
import sys


class DeleteEmployeesWindow:
    def __init__(self, parent, view_window, db_manager, icon_path="asset/OIP-C.ico"):
        self.parent = parent
        self.view_window = view_window
        self.db = db_manager
        self.icon_path = icon_path  # 新增图标路径属性

        # 初始化窗口
        self.top = tk.Toplevel(parent)
        self.top.title("职工信息删除")
        self.top.geometry("400x300")
        self.top.resizable(False, False)
        self.top.grab_set()  # 设置为模态窗口

        # 设置窗口图标（新增代码）
        self._set_window_icon()

        # 创建界面组件（保持不变）
        self.create_widgets()

    def _set_window_icon(self):
        """设置窗口图标（新增方法）"""
        if not self.icon_path:
            return

        try:
            # 尝试设置窗口图标
            if sys.platform == "win32":
                self.top.iconbitmap(self.icon_path)
            else:
                # macOS/Linux使用PhotoImage方式
                img = tk.PhotoImage(file=self.icon_path)
                self.top.call('wm', 'iconphoto', self.top._w, img)

        except Exception as e:
            messagebox.showwarning("图标加载失败",
                                   f"图标加载失败：{os.path.basename(self.icon_path)}\n"
                                   f"错误详情：{str(e)}\n"
                                   f"当前路径：{os.path.abspath(self.icon_path)}")

    def create_widgets(self):
        """ 创建删除窗口界面组件 """
        main_frame = ttk.Frame(self.top, padding=20)
        main_frame.pack(fill=tk.BOTH, expand=True)

        # 职工号输入区域
        input_frame = ttk.LabelFrame(main_frame, text="职工信息查询", padding=10)
        input_frame.pack(fill=tk.X, pady=5)

        ttk.Label(input_frame, text="职工号：").grid(row=0, column=0, padx=5)
        self.emp_id_entry = ttk.Entry(input_frame, width=20)
        self.emp_id_entry.grid(row=0, column=1, padx=5)
        ttk.Button(
            input_frame,
            text="查询",
            command=self.query_employee,
            width=8
        ).grid(row=0, column=2, padx=5)

        # 信息显示区域
        info_frame = ttk.LabelFrame(main_frame, text="职工信息预览", padding=10)
        info_frame.pack(fill=tk.BOTH, expand=True, pady=5)

        self.info_text = tk.Text(info_frame, height=6, state=tk.DISABLED)
        self.info_text.pack(fill=tk.BOTH)

        # 操作按钮区域
        btn_frame = ttk.Frame(main_frame)
        btn_frame.pack(fill=tk.X, pady=10)

        self.delete_btn = ttk.Button(
            btn_frame,
            text="执行删除",
            command=self.confirm_delete
        )
        self.delete_btn.pack(side=tk.RIGHT, padx=5)

        # 样式配置
        style = ttk.Style()
        style.configure("Danger.TButton", foreground="white", background="#d9534f")

    def query_employee(self):
        """ 查询职工详细信息 """
        emp_id = self.emp_id_entry.get().strip()
        if not emp_id:
            messagebox.showwarning("输入错误", "职工号不能为空")
            return

        try:
            # 执行查询
            result = self.db.execute_query(
                "SELECT * FROM employee WHERE employee_id = %s",
                (emp_id,),
                fetch_all=True
            )

            if not result:
                self.show_info("未找到该职工号的信息", "red")
                self.delete_btn.state(['disabled'])
                return

            # 格式化显示信息
            emp_data = result[0]
            info = (
                f"姓名：{emp_data['name']}\n"
                f"性别：{'男' if emp_data['gender'] == 'M' else '女'}\n"
                f"年龄：{emp_data['age']}\n"
                f"学历：{emp_data['education']}\n"
                f"薪资：{emp_data['salary']:.2f}元\n"
                f"电话：{emp_data['phone']}"
            )
            self.show_info(info, "blue")
            self.delete_btn.state(['!disabled'])

        except Exception as e:
            messagebox.showerror("查询失败", f"数据库错误：{str(e)}")

    def show_info(self, text, color):
        """ 显示信息文本 """
        self.info_text.config(state=tk.NORMAL)
        self.info_text.delete(1.0, tk.END)
        self.info_text.insert(tk.END, text)
        self.info_text.config(state=tk.DISABLED, foreground=color)

    def confirm_delete(self):
        """ 二次确认删除操作 """
        emp_id = self.emp_id_entry.get().strip()
        if not emp_id:
            return

        confirm = messagebox.askyesno(
            "删除确认",
            f"确定要永久删除职工号 {emp_id} 的信息吗？\n此操作无法撤销！",
            icon="warning",
            parent=self.top
        )

        if confirm:
            self.execute_delete(emp_id)

    def execute_delete(self, emp_id):
        """ 执行数据库删除操作 """
        try:
            # 执行删除
            success = self.db.delete_employee(emp_id)

            if success:
                messagebox.showinfo("删除成功", "职工信息已从数据库移除")
                self.on_close()  # 关闭当前窗口
                self.view_window.load_data()  # 刷新浏览窗口
            else:
                messagebox.showwarning("删除失败", "未找到该职工号或删除操作未完成")

        except Exception as e:
            messagebox.showerror("删除错误", f"数据库操作失败：{str(e)}")

    def on_close(self):
        """ 窗口关闭处理 """
        self.top.destroy()